#ifndef __GLF_CORE_CONDITION_H_INCLUDED__
#define __GLF_CORE_CONDITION_H_INCLUDED__

#include <glf/config.h>
//#include <glf/core/inlines.h>

namespace glf {

struct Condition
	: private NonCopyable
{
	Condition(Mutex &);
	~Condition(); //virtual ?

	// Unblocks at least one of the threads that are blocked on the specified 
	// condition variable cond (if any threads are blocked on cond). 
	int Signal();

	// Unblocks all threads currently blocked on the specified condition 
	// variable cond.
	int Broadcast();

	//! wait on a condition in ms
	int Wait(unsigned int time = 0);

#ifdef _WIN64
	GLF_DECLARE_IMPL(72)
#else
	GLF_DECLARE_IMPL(60)
#endif
};


} //namespace glf

#endif
